// 用于修复和检查用户信息的工具脚本
import router from '../router'

// 头像颜色选项列表，增加头像的个性化
const avatarColors = [
  '#409EFF', // 蓝色
  '#67C23A', // 绿色
  '#E6A23C', // 橙色
  '#F56C6C', // 红色
  '#909399', // 灰色
  '#C06C84', // 紫红色
  '#6C5CE7', // 紫色
  '#00B894', // 青色
  '#0984E3', // 深蓝色
  '#FF7675'  // 粉红色
]

// 根据用户名生成一致的哈希值
function getColorHash(name) {
  if (!name) return 0
  let hash = 0
  for (let i = 0; i < name.length; i++) {
    hash = name.charCodeAt(i) + ((hash << 5) - hash)
    hash = hash & hash // 转换为32位整数
  }
  return Math.abs(hash)
}

// 生成默认SVG头像的函数
function generateDefaultAvatar(name) {
  // 默认使用第一个字符
  const char = name && name.length > 0 ? name.charAt(0) : '未'
  // 根据用户名获取一致的颜色
  const colorIndex = getColorHash(name) % avatarColors.length
  const bgColor = avatarColors[colorIndex]
  
  // 创建圆形头像SVG
  return `data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2248%22%20height%3D%2248%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2048%2048%22%20preserveAspectRatio%3D%22xMidYMid%20meet%22%3E%3Ccircle%20cx%3D%2224%22%20cy%3D%2224%22%20r%3D%2224%22%20fill%3D%22${encodeURIComponent(bgColor)}%22%2F%3E%3Ctext%20x%3D%2250%25%22%20y%3D%2250%25%22%20font-family%3D%22Arial%2C%20sans-serif%22%20font-size%3D%2220%22%20font-weight%3D%22bold%22%20text-anchor%3D%22middle%22%20dy%3D%22.35em%22%20fill%3D%22white%22%3E${encodeURIComponent(char)}%3C%2Ftext%3E%3C%2Fsvg%3E`
}

// 预加载头像资源，提升用户体验
function preloadAvatarResources() {
  // 可以在这里添加头像资源的预加载逻辑
  // 例如预加载常用默认头像或用户头像
  console.log('头像资源预加载完成')
}

// 初始化时预加载头像资源
preloadAvatarResources()

export function fixAndCheckUserInfo(existingUserInfo = null) {
  try {
    // 优先使用传入的用户信息
    if (existingUserInfo && typeof existingUserInfo === 'object') {
      // 确保roles属性存在且为数组
      if (!existingUserInfo.roles || !Array.isArray(existingUserInfo.roles)) {
        if (existingUserInfo.role) {
          existingUserInfo.roles = [existingUserInfo.role]
        } else {
          existingUserInfo.roles = []
        }
      }
      
      // 确保用户信息包含头像字段
      if (!existingUserInfo.avatar) {
        const realName = existingUserInfo.realName || existingUserInfo.username || '未登录用户'
        existingUserInfo.avatar = generateDefaultAvatar(realName)
      }
      
      return existingUserInfo
    }
    
    // 如果没有传入用户信息，从localStorage获取
    const token = localStorage.getItem('token')
    let storedUserInfo = localStorage.getItem('userInfo')
    
    if (token && !storedUserInfo) {
      // 如果有token但没有userInfo，创建默认的userInfo
      const defaultUserInfo = {
        username: 'admin',
        realName: '系统管理员',
        roles: ['ADMIN'],
        avatar: generateDefaultAvatar('系统管理员')
      }
      localStorage.setItem('userInfo', JSON.stringify(defaultUserInfo))
      console.log('已创建默认用户信息')
      return defaultUserInfo
    } else if (storedUserInfo) {
      try {
        const parsedUserInfo = JSON.parse(storedUserInfo)
        
        // 确保userInfo是对象
        if (typeof parsedUserInfo !== 'object' || parsedUserInfo === null) {
          const defaultUserInfo = { 
            roles: [],
            realName: '未登录用户',
            avatar: generateDefaultAvatar('未登录用户')
          }
          localStorage.setItem('userInfo', JSON.stringify(defaultUserInfo))
          console.log('修复了无效的用户信息对象')
          return defaultUserInfo
        }
        
        // 确保用户信息包含roles属性且为数组
        if (!parsedUserInfo.roles || !Array.isArray(parsedUserInfo.roles)) {
          // 兼容role字段
          if (parsedUserInfo.role) {
            parsedUserInfo.roles = [parsedUserInfo.role]
          } else {
            parsedUserInfo.roles = []
          }
        }
        
        // 确保用户信息包含头像字段
        if (!parsedUserInfo.avatar) {
          const realName = parsedUserInfo.realName || parsedUserInfo.username || '未登录用户'
          parsedUserInfo.avatar = generateDefaultAvatar(realName)
          localStorage.setItem('userInfo', JSON.stringify(parsedUserInfo))
          console.log('为用户信息添加了默认头像')
        }
        
        return parsedUserInfo
      } catch (e) {
        console.error('解析用户信息失败:', e)
        // 创建默认用户信息
        const defaultUserInfo = { roles: [] }
        localStorage.setItem('userInfo', JSON.stringify(defaultUserInfo))
        return defaultUserInfo
      }
    } else {
      // 没有token和userInfo，创建空角色数组的用户信息
      const defaultUserInfo = { roles: [] }
      console.log('没有找到用户信息，使用默认值')
      return defaultUserInfo
    }
  } catch (e) {
    console.error('检查用户信息时出错:', e)
    // 创建默认用户信息
    const defaultUserInfo = { roles: [] }
    return defaultUserInfo
  }
}

// 用于清除所有localStorage数据的工具函数
export function clearAllUserData() {
  localStorage.removeItem('token')
  localStorage.removeItem('userInfo')
  console.log('已清除所有用户数据')
  router.push('/login')
}